

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Models;
using Models.Entity;

namespace IRepository
{
    /// <summary>
    /// 每周课表
    /// </summary>
    public interface IWeekCourseRepository
    {
        /// <summary>
        /// 添加课时
        /// </summary>
        /// <param name="inEnt"></param>
        /// <returns></returns>
        Task<ResultObj<int>> AddWeekCourse(DtoAddWeekCourse inEnt);

        /// <summary>
        /// 删除课时
        /// </summary>
        /// <param name="inEnt"></param>
        /// <returns></returns>
        Task<ResultObj<int>> DeleteWeekCourse(DtoDo<int> inEnt);

        /// <summary>
        /// 生成课表，返回生成课目数
        /// </summary>
        /// <param name="inObj"></param>
        /// <returns></returns>
        Task<ResultObj<int>> MakeWeekCourse(DtoDo<int> inObj);

        /// <summary>
        /// 获取年级课表
        /// </summary>
        /// <param name="inObj">课表信息</param>
        /// <returns></returns>
        Task<ResultObj<CClassesWeekCourseEntityView>> GetWeekCourse(DtoWeekCourse inObj);

        /// <summary>
        /// 删除年级课表
        /// </summary>
        /// <param name="inObj">课表信息</param>
        /// <returns></returns>
        Task<ResultObj<int>> Delete(DtoWeekCourse inObj);

        /// <summary>
        /// 生成课表
        /// </summary>
        /// <param name="usedList">已存在的课表</param>
        /// <returns></returns>
        List<int> MakeCourseTable(List<int> usedList);

        /// <summary>
        /// 生成班级课表
        /// </summary>
        Task<ResultObj<Dictionary<string, string>>> CourseTable();
        /// <summary>
        /// 生成老师课表
        /// </summary>
        Task<ResultObj<Dictionary<string, string>>> TeacherCourseTable();

        /// <summary>
        /// 格式
        /// </summary>
        /// <param name="week_num"></param>
        /// <returns></returns>
        string Formart(int week_num);

        /// <summary>
        /// 获取班级课表
        /// </summary>
        /// <param name="inObj"></param>
        /// <returns></returns>
        Task<ResultObj<CClassesEntity>> GetClassesCourse(DtoDo<int> inObj);

        /// <summary>
        /// 获取教师课表
        /// </summary>
        /// <param name="inObj"></param>
        /// <returns></returns>
        Task<ResultObj<CTeacherEntity>> GetTeacherCourse(DtoDo<int> inObj);

    }
}
